package com.vt.statusmanager.weekdateinformer;

import java.util.Calendar;
import java.util.Formatter;
import java.util.GregorianCalendar;
import com.vt.statusmanager.Preconditions;

/**
 * Класс для получения временных интервалов соответствующих номеру недели
 * 
 * @author Vit
 * 
 */
public class NumberOfWeek {
	/**
	 * Получение интервала, выраженного в датах, соответствующего выбранному номеру недели
	 * 
	 * @param year Год
	 * @param numberWeek Номер недели в году
	 * @return Строковое значение интервала времени типа: 2012-03-26 - 2012-04-01
	 */
	public static String getInterval(int year, int numberWeek) {
		Preconditions.notNull(year, numberWeek);
		Calendar calendar = new GregorianCalendar(year, 0, 0);
		calendar.set(Calendar.HOUR, 24);
		// Дохождение до первого понедельника в году
		while (!(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY)) {
			calendar.set(Calendar.MILLISECOND, 86400000);
		}
		String furstPart;
		String secondPart;
		// Начало недели
		calendar.set(Calendar.HOUR, 168 * (numberWeek - 1));
		furstPart = formatDate(calendar);
		// Последний день недели
		calendar.set(Calendar.HOUR, (((numberWeek - 1) + 1) * 168 - 1));
		secondPart = formatDate(calendar);
		return furstPart + " - " + secondPart;
	}

	/**
	 * Метод, который возвращает строковое отображение даты
	 * 
	 * @param calenda Экземпляр класса календарь для отображения
	 * @return  Строковое значение даты формата: 2012-03-26
	 */
	private static String formatDate(Calendar calendar) {
		Preconditions.notNull(calendar);
		Formatter formatter = new Formatter();
		formatter.format("%1$tF", calendar);
		return formatter.toString();
	}
}
